package com.djf.service;

import com.djf.entity.Order;
import com.djf.entity.User;
import com.djf.entity.UserDelivery;

import java.util.List;

/**
 * 数据生成服务接口
 * 用于生成测试数据，确保订单表和配送表数据的一一对应关系
 *
 * @author djf
 * @since 2025-01-22
 */
public interface DataGeneratorService {

    /**
     * 生成测试用户数据
     *
     * @param count 生成数量
     * @return 生成的用户列表
     */
    List<User> generateUsers(int count);

    /**
     * 生成测试订单数据
     *
     * @param count 生成数量
     * @param startMonth 开始月份（格式：202501）
     * @param endMonth 结束月份（格式：202512）
     * @return 生成的订单列表
     */
    List<Order> generateOrders(int count, String startMonth, String endMonth);

    /**
     * 生成测试配送数据（与订单一一对应）
     *
     * @param orders 订单列表
     * @return 生成的配送列表
     */
    List<UserDelivery> generateDeliveries(List<Order> orders);

    /**
     * 批量生成完整的测试数据（用户、订单、配送）
     *
     * @param userCount 用户数量
     * @param orderCount 订单数量
     * @param startMonth 开始月份（格式：202501）
     * @param endMonth 结束月份（格式：202512）
     * @return 生成结果统计
     */
    GenerateResult generateCompleteTestData(int userCount, int orderCount, String startMonth, String endMonth);

    /**
     * 清空所有测试数据
     */
    void clearAllTestData();

    /**
     * 数据生成结果
     */
    class GenerateResult {
        private int userCount;
        private int orderCount;
        private int deliveryCount;
        private String message;

        public GenerateResult() {}

        public GenerateResult(int userCount, int orderCount, int deliveryCount, String message) {
            this.userCount = userCount;
            this.orderCount = orderCount;
            this.deliveryCount = deliveryCount;
            this.message = message;
        }

        // Getters and Setters
        public int getUserCount() {
            return userCount;
        }

        public void setUserCount(int userCount) {
            this.userCount = userCount;
        }

        public int getOrderCount() {
            return orderCount;
        }

        public void setOrderCount(int orderCount) {
            this.orderCount = orderCount;
        }

        public int getDeliveryCount() {
            return deliveryCount;
        }

        public void setDeliveryCount(int deliveryCount) {
            this.deliveryCount = deliveryCount;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }
    }
}